package com.demo.session;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

/**
 * web服务器：一般指一些静态的服务器，主要用来提供静态资源，如html、css、js、图片等等
 *   例如：apache server、IIS、Nginx
 * web应用服务器：它可以运行web应用程序，并且提供动态资源，如：Servlet、JSP、SpringMVC等等
 *   web应用服务器也可以去部署静态资源
 *   例如：Tomcat、Jetty、WebLogic、WebSphere，Ant等等
 *
 * 针对可以运行Servlet（JSP等JavaEE技术）的服务器：Servlet容器，Servlet引擎
 */
@WebServlet("/session3")
public class SessionDemo3 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /**
         * sesion的生命周期：
         * 1、创建的时间：
         *    1）客户端访问服务器，在服务器中有代码第一次调用getSession()，这时肯定是不存在针对这个客户端的session对象，这时web应用服务器会创建session对象
         *    2）调用getSession(true),功能与getSession()一样，
         *    若session已经存在调用getSession或getSession(true)，只会返回session对象，不创建session
         *    3）调用getSession(false),这时只能获取session，不创建session
         *
         *    特殊情况：项目中如果有JSP文件存在，默认情况下，访问JSP的时候，会自动创建session
         *
         * 2、销毁的时间：
         *   1）每个session对象都有自己的过期时间，默认30分钟
         *      ①可以在tomcat/conf/web.xml 文件中修改全局的session过期时间
         *      ②在每个项目的web.xml文件中修改项目的session过期时间
         *      ③在代码中修改session的过期时间
         *   2）手动调用session的销毁方法：session.invalidate()
         *   3）不正常关闭服务器，销毁session对象
         *      若正常关闭服务器，这时session会被序列化到work目录
         *   4）将项目从服务器中移出（取消部署），session对象会被销毁
         */

        HttpSession session = req.getSession(true);
        session.setMaxInactiveInterval(5);


    }
}
